package pe.com.bbva.ge.vista.vaadin.ui;

import java.math.BigDecimal;
import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;

import pe.com.bbva.ge.domain.configuracion.Valor;
import pe.com.bbva.ge.domain.solicitud.DetalleCasetera;
import pe.com.bbva.ge.domain.solicitud.DetalleMoneda;
import pe.com.bbva.ge.domain.solicitud.Solicitud;
import pe.com.bbva.ge.negocio.ConfiguracionNegocio;
import pe.com.bbva.ge.negocio.SolicitudNegocio;
import pe.com.bbva.ge.utileria.Constante;
import pe.com.bbva.ge.vista.vaadin.ui.component.TxtNumerico;
import pe.com.bbva.ge.vista.vaadin.ui.utileria.bean.PropiedadesTxtNumerico;

import com.vaadin.annotations.AutoGenerated;
import com.vaadin.data.Item;
import com.vaadin.data.util.IndexedContainer;
import com.vaadin.ui.Alignment;
import com.vaadin.ui.Button;
import com.vaadin.ui.HorizontalLayout;
import com.vaadin.ui.Label;
import com.vaadin.ui.Panel;
import com.vaadin.ui.Table;
import com.vaadin.ui.TextField;
import com.vaadin.ui.VerticalLayout;
import com.vaadin.ui.Button.ClickEvent;
import com.vaadin.ui.Button.ClickListener;
import com.vaadin.ui.Window;

public class ConfirmarAccionSolicitudUI extends VentanaUI {

	@AutoGenerated
	private VerticalLayout mainLayout;

	@AutoGenerated
	private Panel panel_1;

	@AutoGenerated
	private VerticalLayout verticalLayout_2;

	@AutoGenerated
	private HorizontalLayout horizontalLayout_3;

	@AutoGenerated
	private HorizontalLayout horizontalLayout_6;

	@AutoGenerated
	private Button btnNo;

	@AutoGenerated
	private HorizontalLayout horizontalLayout_4;

	@AutoGenerated
	private Button btnSi;

	@AutoGenerated
	private HorizontalLayout horizontalLayout_5;

	@AutoGenerated
	private HorizontalLayout horizontalLayout_2;

	@AutoGenerated
	private Table tblTotales;

	@AutoGenerated
	private HorizontalLayout horizontalLayout_1;

	@AutoGenerated
	private Label lblMensaje;

	/*- VaadinEditorProperties={"grid":"RegularGrid,20","showGrid":true,"snapToGrid":true,"snapToObject":true,"movingGuides":false,"snappingDistance":10} */

	

	/*- VaadinEditorProperties={"grid":"RegularGrid,20","showGrid":true,"snapToGrid":true,"snapToObject":true,"movingGuides":false,"snappingDistance":10} */

	

	/*- VaadinEditorProperties={"grid":"RegularGrid,20","showGrid":true,"snapToGrid":true,"snapToObject":true,"movingGuides":false,"snappingDistance":10} */

	

	/*- VaadinEditorProperties={"grid":"RegularGrid,20","showGrid":true,"snapToGrid":true,"snapToObject":true,"movingGuides":false,"snappingDistance":10} */

	

	/*- VaadinEditorProperties={"grid":"RegularGrid,20","showGrid":true,"snapToGrid":true,"snapToObject":true,"movingGuides":false,"snappingDistance":10} */

	

	/*- VaadinEditorProperties={"grid":"RegularGrid,20","showGrid":true,"snapToGrid":true,"snapToObject":true,"movingGuides":false,"snappingDistance":10} */

	

	/*- VaadinEditorProperties={"grid":"RegularGrid,20","showGrid":true,"snapToGrid":true,"snapToObject":true,"movingGuides":false,"snappingDistance":10} */

	

	/*- VaadinEditorProperties={"grid":"RegularGrid,20","showGrid":true,"snapToGrid":true,"snapToObject":true,"movingGuides":false,"snappingDistance":10} */

	

	/*- VaadinEditorProperties={"grid":"RegularGrid,20","showGrid":true,"snapToGrid":true,"snapToObject":true,"movingGuides":false,"snappingDistance":10} */

	

	/*- VaadinEditorProperties={"grid":"RegularGrid,20","showGrid":true,"snapToGrid":true,"snapToObject":true,"movingGuides":false,"snappingDistance":10} */

	

	/*- VaadinEditorProperties={"grid":"RegularGrid,20","showGrid":true,"snapToGrid":true,"snapToObject":true,"movingGuides":false,"snappingDistance":10} */

	

	/*- VaadinEditorProperties={"grid":"RegularGrid,20","showGrid":true,"snapToGrid":true,"snapToObject":true,"movingGuides":false,"snappingDistance":10} */

	

	/*- VaadinEditorProperties={"grid":"RegularGrid,20","showGrid":true,"snapToGrid":true,"snapToObject":true,"movingGuides":false,"snappingDistance":10} */

	

	/*- VaadinEditorProperties={"grid":"RegularGrid,20","showGrid":true,"snapToGrid":true,"snapToObject":true,"movingGuides":false,"snappingDistance":10} */

	

	/*- VaadinEditorProperties={"grid":"RegularGrid,20","showGrid":true,"snapToGrid":true,"snapToObject":true,"movingGuides":false,"snappingDistance":10} */

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	
	

	/*- VaadinEditorProperties={"grid":"RegularGrid,20","showGrid":true,"snapToGrid":true,"snapToObject":true,"movingGuides":false,"snappingDistance":10} */

	

	/*- VaadinEditorProperties={"grid":"RegularGrid,20","showGrid":true,"snapToGrid":true,"snapToObject":true,"movingGuides":false,"snappingDistance":10} */

	

	/*- VaadinEditorProperties={"grid":"RegularGrid,20","showGrid":true,"snapToGrid":true,"snapToObject":true,"movingGuides":false,"snappingDistance":10} */

	

	/*- VaadinEditorProperties={"grid":"RegularGrid,20","showGrid":true,"snapToGrid":true,"snapToObject":true,"movingGuides":false,"snappingDistance":10} */

	private Solicitud solicitud;
	private Window wndSolicitud;
	private PropiedadesTxtNumerico propTxtNDecimales;
	private BandejaDeTrabajoUI bandejaDeTrabajoUI;
	
	@Autowired
	private ConfiguracionNegocio genericoNegocio;
	
	@Autowired
	private SolicitudNegocio gestionarSolicitudNegocio;
	
	/**
	 * The constructor should first build the main layout, set the
	 * composition root and then do any custom initialization.
	 *
	 * The constructor will not be automatically regenerated by the
	 * visual editor.
	 */
	public ConfirmarAccionSolicitudUI(Solicitud solicitud, Window wndSolicitud, BandejaDeTrabajoUI bandejaDeTrabajoUI) {
		buildMainLayout();
		setCompositionRoot(mainLayout);

		// TODO add user code here
		this.solicitud = solicitud;
		this.wndSolicitud = wndSolicitud;
		this.bandejaDeTrabajoUI = bandejaDeTrabajoUI;
	}

	public void postConstruccion()
	{
		this.propTxtNDecimales = new PropiedadesTxtNumerico();
		this.propTxtNDecimales.setEsDecimal(true);
		
		btnSi.addListener(new ClickListener() {
			@Override
			public void buttonClick(ClickEvent event) {
				ejecutarSi();				
			}
		});
		
		btnNo.addListener(new ClickListener() {
			@Override
			public void buttonClick(ClickEvent event) {
				ejecutarNo();				
			}
		});
		
		
		List<Valor> monedas = genericoNegocio.obtenerValores("MONEDA");
		
		IndexedContainer container = new IndexedContainer();
		container.addContainerProperty("concepto", TextField.class,  null);
		
		tblTotales.setColumnHeader("concepto", "Concepto");
		
		tblTotales.setColumnWidth("concepto", 100);
		
		for (Valor moneda : monedas)
		{
			container.addContainerProperty(moneda.getCodigo(), TextField.class,  null);
			tblTotales.setColumnWidth(moneda.getCodigo(), 120);
		}
		
		tblTotales.setContainerDataSource(container);
		List<DetalleMoneda> listaDetalleMoneda = gestionarSolicitudNegocio.obtenerDetalleMonedas(gestionarSolicitudNegocio.obtenerDestinos(this.solicitud).get(0));
		
		// Montos Oficina
		Item item = container.addItem(1);
		TextField txtMontoOficina = new TextField();
		txtMontoOficina.setValue("Monto [Oficina]");
		txtMontoOficina.setEnabled(false);
		txtMontoOficina.setWidth("90");
		item.getItemProperty("concepto").setValue(txtMontoOficina);
		
		for (Valor moneda : monedas)
		{
			TxtNumerico txtMoneda = new TxtNumerico("", this.propTxtNDecimales);
			
			for(DetalleMoneda detalleMoneda : listaDetalleMoneda)
			{
				if(moneda.getId() == detalleMoneda.getMoneda().getId())
				{
					txtMoneda.setValue(detalleMoneda.getTotalBillete().add(detalleMoneda.getTotalMoneda()).toString());
				}
			}
			
			txtMoneda.setEnabled(false);
			txtMoneda.setWidth("110");
			item.getItemProperty(moneda.getCodigo()).setValue(txtMoneda);
		}
		
		// Montos ATM
//		List<DetalleCasetera> listaDetalleCaseteras = gestionarSolicitudNegocio.obtenerDetalleCasetera(this.solicitud);
		
		item = container.addItem(2);
		TextField txtMontoATM = new TextField();
		txtMontoATM.setValue("Monto ATM");
		txtMontoATM.setEnabled(false);
		txtMontoATM.setWidth("90");
		item.getItemProperty("concepto").setValue(txtMontoATM);
		
		for (Valor moneda : monedas)
		{
			TxtNumerico txtMoneda = new TxtNumerico("", this.propTxtNDecimales);
			BigDecimal total = new BigDecimal(0);
			
			/*for(DetalleCasetera detalleCasetera : listaDetalleCaseteras)
			{
				if(moneda.getId() == detalleCasetera.getCasetera().getDenominacion().getMoneda().getId())
				{
					total = total.add(BigDecimal.valueOf(detalleCasetera.getCantidad()).multiply(detalleCasetera.getCasetera().getDenominacion().getValor()));
				}
			}*/
			
			if(total.compareTo(BigDecimal.ZERO) > 0)
			{
				txtMoneda.setValue(total.toString());
			}
			
			txtMoneda.setEnabled(false);
			txtMoneda.setWidth("110");
			item.getItemProperty(moneda.getCodigo()).setValue(txtMoneda);
		}
		
		// Sumando totales
		item = container.addItem(3);
		TextField txtMontoTotal = new TextField();
		txtMontoTotal.setValue("Total:");
		txtMontoTotal.setEnabled(false);
		txtMontoTotal.setWidth("90");
		item.getItemProperty("concepto").setValue(txtMontoTotal);
		
		for (Valor moneda : monedas)
		{
			BigDecimal totalMontoOfivina = new BigDecimal(0);
			BigDecimal totalMontoATM = new BigDecimal(0);
			TxtNumerico txtTotal = new TxtNumerico("", this.propTxtNDecimales);
			
			Object itemId = (Object) 1;
			Item itemOT = tblTotales.getItem(itemId);
			TxtNumerico txtMontoOficinaToatl = (TxtNumerico) itemOT.getItemProperty(moneda.getCodigo()).getValue();
			String valorMontoOficina = txtMontoOficinaToatl.getValue().toString();
			
			if(valorMontoOficina.trim().length() > 0)
			{
				totalMontoOfivina = BigDecimal.valueOf(Double.valueOf(valorMontoOficina));
			}
			
			itemId = (Object) 2;
			itemOT = tblTotales.getItem(itemId);
			TxtNumerico txtMontoATMTotal = (TxtNumerico) itemOT.getItemProperty(moneda.getCodigo()).getValue();
			String valorMontoATM = txtMontoATMTotal.getValue().toString();
			
			if(valorMontoATM.trim().length() > 0)
			{
				totalMontoATM = BigDecimal.valueOf(Double.valueOf(valorMontoATM));
			}
			
			if(totalMontoOfivina.compareTo(BigDecimal.ZERO) > 0 || totalMontoATM.compareTo(BigDecimal.ZERO) > 0)
			{
				txtTotal.setValue(totalMontoOfivina.add(totalMontoATM).toString());
			}
			
			txtTotal.setEnabled(false);
			txtTotal.setWidth("110");
			item.getItemProperty(moneda.getCodigo()).setValue(txtTotal);
		}
	}
	
	private void ejecutarSi()
	{
		/*if(this.solicitud.getEstado().getCodigo().equals(Constante.ESTADO_SOLICITUD.REGISTRADO))
		{
			
		}*/
		
		gestionarSolicitudNegocio.actualizarSolicitud(this.solicitud);
		this.bandejaDeTrabajoUI.buscarSolicitudes(null);
		getApplication().getMainWindow().getWindow().removeWindow(this.wndSolicitud);
		getApplication().getMainWindow().getWindow().removeWindow(getWindow());
	}
	
	private void ejecutarNo()
	{
		getApplication().getMainWindow().getWindow().removeWindow(getWindow());
	}
	
	@AutoGenerated
	private VerticalLayout buildMainLayout() {
		// common part: create layout
		mainLayout = new VerticalLayout();
		mainLayout.setImmediate(false);
		mainLayout.setWidth("-1px");
		mainLayout.setHeight("-1px");
		mainLayout.setMargin(false);
		
		// top-level component properties
		setWidth("-1px");
		setHeight("-1px");
		
		// panel_1
		panel_1 = buildPanel_1();
		mainLayout.addComponent(panel_1);
		mainLayout.setExpandRatio(panel_1, 1.0f);
		
		return mainLayout;
	}

	@AutoGenerated
	private Panel buildPanel_1() {
		// common part: create layout
		panel_1 = new Panel();
		panel_1.setImmediate(false);
		panel_1.setWidth("100.0%");
		panel_1.setHeight("73.61%");
		
		// verticalLayout_2
		verticalLayout_2 = buildVerticalLayout_2();
		panel_1.setContent(verticalLayout_2);
		
		return panel_1;
	}

	@AutoGenerated
	private VerticalLayout buildVerticalLayout_2() {
		// common part: create layout
		verticalLayout_2 = new VerticalLayout();
		verticalLayout_2.setImmediate(false);
		verticalLayout_2.setWidth("-1px");
		verticalLayout_2.setHeight("-1px");
		verticalLayout_2.setMargin(false);
		
		// horizontalLayout_1
		horizontalLayout_1 = buildHorizontalLayout_1();
		verticalLayout_2.addComponent(horizontalLayout_1);
		
		// horizontalLayout_2
		horizontalLayout_2 = buildHorizontalLayout_2();
		verticalLayout_2.addComponent(horizontalLayout_2);
		
		// horizontalLayout_3
		horizontalLayout_3 = buildHorizontalLayout_3();
		verticalLayout_2.addComponent(horizontalLayout_3);
		
		return verticalLayout_2;
	}

	@AutoGenerated
	private HorizontalLayout buildHorizontalLayout_1() {
		// common part: create layout
		horizontalLayout_1 = new HorizontalLayout();
		horizontalLayout_1.setImmediate(false);
		horizontalLayout_1.setWidth("100.0%");
		horizontalLayout_1.setHeight("-1px");
		horizontalLayout_1.setMargin(false);
		
		// lblMensaje
		lblMensaje = new Label();
		lblMensaje.setImmediate(false);
		lblMensaje.setWidth("100.0%");
		lblMensaje.setHeight("-1px");
		lblMensaje.setValue("Mensaje ");
		horizontalLayout_1.addComponent(lblMensaje);
		horizontalLayout_1.setExpandRatio(lblMensaje, 1.0f);
		
		return horizontalLayout_1;
	}

	@AutoGenerated
	private HorizontalLayout buildHorizontalLayout_2() {
		// common part: create layout
		horizontalLayout_2 = new HorizontalLayout();
		horizontalLayout_2.setImmediate(false);
		horizontalLayout_2.setWidth("-1px");
		horizontalLayout_2.setHeight("130px");
		horizontalLayout_2.setMargin(false);
		
		// tblTotales
		tblTotales = new Table();
		tblTotales.setImmediate(false);
		tblTotales.setWidth("560px");
		tblTotales.setHeight("120px");
		horizontalLayout_2.addComponent(tblTotales);
		
		return horizontalLayout_2;
	}

	@AutoGenerated
	private HorizontalLayout buildHorizontalLayout_3() {
		// common part: create layout
		horizontalLayout_3 = new HorizontalLayout();
		horizontalLayout_3.setImmediate(false);
		horizontalLayout_3.setWidth("100.0%");
		horizontalLayout_3.setHeight("-1px");
		horizontalLayout_3.setMargin(false);
		
		// horizontalLayout_5
		horizontalLayout_5 = new HorizontalLayout();
		horizontalLayout_5.setImmediate(false);
		horizontalLayout_5.setWidth("227px");
		horizontalLayout_5.setHeight("-1px");
		horizontalLayout_5.setMargin(false);
		horizontalLayout_3.addComponent(horizontalLayout_5);
		
		// btnSi
		btnSi = new Button();
		btnSi.setCaption("Si");
		btnSi.setImmediate(true);
		btnSi.setWidth("-1px");
		btnSi.setHeight("-1px");
		horizontalLayout_3.addComponent(btnSi);
		horizontalLayout_3.setComponentAlignment(btnSi, new Alignment(48));
		
		// horizontalLayout_4
		horizontalLayout_4 = new HorizontalLayout();
		horizontalLayout_4.setImmediate(false);
		horizontalLayout_4.setWidth("26px");
		horizontalLayout_4.setHeight("-1px");
		horizontalLayout_4.setMargin(false);
		horizontalLayout_3.addComponent(horizontalLayout_4);
		
		// btnNo
		btnNo = new Button();
		btnNo.setCaption("No");
		btnNo.setImmediate(true);
		btnNo.setWidth("-1px");
		btnNo.setHeight("-1px");
		horizontalLayout_3.addComponent(btnNo);
		horizontalLayout_3.setComponentAlignment(btnNo, new Alignment(48));
		
		// horizontalLayout_6
		horizontalLayout_6 = new HorizontalLayout();
		horizontalLayout_6.setImmediate(false);
		horizontalLayout_6.setWidth("223px");
		horizontalLayout_6.setHeight("-1px");
		horizontalLayout_6.setMargin(false);
		horizontalLayout_3.addComponent(horizontalLayout_6);
		
		return horizontalLayout_3;
	}

}
